package com.nl.search;

import java.util.Arrays;

public class OnlyOnceNumberInArray {

	
	public static int[] onlyOnce(int[]array){
		
		if(array==null || array.length<2){
			return null;
		}
		int xor =array[0];
		for(int i=1;i<array.length;i++){
			xor^=array[i];
		}
		
		int firts1bit = getFirst1Bit(xor);
		
		int num1=0,num2=0;
		for(int i=0;i<array.length;i++){
			if(isNbit1(array[i],firts1bit)){
				num1^=array[i];
			}else{
				num2^=array[i];
			}
		}
		return new int[]{num1,num2};
	}

	private static boolean isNbit1(int i, int firts1bit) {
		return (i&firts1bit) ==0;
	}

	private static int getFirst1Bit(int xor) {
		int flag=1;
		int index = 0;
		while(index<32&& (xor&flag)==0){
			flag=flag<<1;
			index++;
		}
		return flag;
	}
	public static void main(String[] args) {
		System.out.println(Arrays.toString(onlyOnce(new int[]{12,12,13,13,14,14,23,56})));
	}
}
